package com.hb;

import com.hb.interfaces.Dessert;
import com.hb.qualifiers.Cold;
import com.hb.qualifiers.Creamy;
import org.springframework.beans.factory.annotation.Autowired;

public class QualifierDessert {
    private Dessert dessert;

    @Autowired
    // 1、@Qualifier 注解是使用限定符的主要方式。它与 @Autowired 或 @Inject 一同使用，在注入的时候指定想要注入进去的是哪个 bean。
    // 2、为 @Qualifier 注解所设置的参数就是想要注入的 bean 的 ID。
    // 3、如果没有指定其他的限定符的话，所有 bean 的默认限定符就是其 ID。基于默认的 bean ID 作为限定符是非常简单的，但这有可能会引入一些问题。
    // 如果重构了 IceCream 类，将其重命名为 Gelato 的话，那此时会发生什么情况？如果这样的话，bean 的 ID 和默认的限定符会变为 gelato，
    // 这就无法匹配 setDessert() 方法中的限定符。@Qualifier 注解指定的限定符与要注入的 bean 的 ID 是紧耦合的，自动装配会失败。
    //@Qualifier("iceCream")
    // 4、使用指定的限定符，避免默认的限定符引起的紧耦合。
    //@Qualifier("Cold")
    // 5、使用自定义限定符注解
    @Cold
    @Creamy
    public void setDessert(Dessert dessert) {
        this.dessert = dessert;
    }
}
